mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-19 06:09:01 +00:00
Change arg type to unsigned int from signed int (#1078)
* Change arg type to unsigned int from signed int * Fix formatting issues
This commit is contained in:
committed by
GitHub
parent
ca673af488
commit
216455842d
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// Copyright (c) 2017 The Khronos Group Inc.
|
||||
//
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
@@ -16,27 +16,33 @@
|
||||
#include "common.h"
|
||||
|
||||
static char hash_table_kernel[] =
|
||||
"#if 0\n"
|
||||
"#pragma OPENCL EXTENSION cl_khr_int64_base_atomics : enable\n"
|
||||
"#pragma OPENCL EXTENSION cl_khr_int64_extended_atomics : enable\n"
|
||||
"#endif\n"
|
||||
"typedef struct BinNode {\n"
|
||||
" int value;\n"
|
||||
" atomic_uintptr_t pNext;\n"
|
||||
"} BinNode;\n"
|
||||
"#if 0\n"
|
||||
"#pragma OPENCL EXTENSION cl_khr_int64_base_atomics : enable\n"
|
||||
"#pragma OPENCL EXTENSION cl_khr_int64_extended_atomics : enable\n"
|
||||
"#endif\n"
|
||||
"typedef struct BinNode {\n"
|
||||
" int value;\n"
|
||||
" atomic_uintptr_t pNext;\n"
|
||||
"} BinNode;\n"
|
||||
|
||||
"__kernel void build_hash_table(__global uint* input, __global BinNode* pNodes, volatile __global atomic_uint* pNumNodes, uint numBins)\n"
|
||||
"{\n"
|
||||
" __global BinNode *pNew = &pNodes[ atomic_fetch_add_explicit(pNumNodes, 1, memory_order_relaxed, memory_scope_all_svm_devices) ];\n"
|
||||
" uint i = get_global_id(0);\n"
|
||||
" uint b = input[i] % numBins;\n"
|
||||
" pNew->value = input[i];\n"
|
||||
" uintptr_t next = atomic_load_explicit(&(pNodes[b].pNext), memory_order_seq_cst, memory_scope_all_svm_devices);\n"
|
||||
" do\n"
|
||||
" {\n"
|
||||
" atomic_store_explicit(&(pNew->pNext), next, memory_order_seq_cst, memory_scope_all_svm_devices);\n" // always inserting at head of list
|
||||
" } while(!atomic_compare_exchange_strong_explicit(&(pNodes[b].pNext), &next, (uintptr_t)pNew, memory_order_seq_cst, memory_order_relaxed, memory_scope_all_svm_devices));\n"
|
||||
"}\n";
|
||||
"__kernel void build_hash_table(__global uint* input, __global BinNode* "
|
||||
"pNodes, volatile __global atomic_uint* pNumNodes, uint numBins)\n"
|
||||
"{\n"
|
||||
" __global BinNode *pNew = &pNodes[ atomic_fetch_add_explicit(pNumNodes, "
|
||||
"1u, memory_order_relaxed, memory_scope_all_svm_devices) ];\n"
|
||||
" uint i = get_global_id(0);\n"
|
||||
" uint b = input[i] % numBins;\n"
|
||||
" pNew->value = input[i];\n"
|
||||
" uintptr_t next = atomic_load_explicit(&(pNodes[b].pNext), "
|
||||
"memory_order_seq_cst, memory_scope_all_svm_devices);\n"
|
||||
" do\n"
|
||||
" {\n"
|
||||
" atomic_store_explicit(&(pNew->pNext), next, memory_order_seq_cst, "
|
||||
"memory_scope_all_svm_devices);\n" // always inserting at head of list
|
||||
" } while(!atomic_compare_exchange_strong_explicit(&(pNodes[b].pNext), "
|
||||
"&next, (uintptr_t)pNew, memory_order_seq_cst, memory_order_relaxed, "
|
||||
"memory_scope_all_svm_devices));\n"
|
||||
"}\n";
|
||||
|
||||
typedef struct BinNode{
|
||||
cl_uint value;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// Copyright (c) 2017 The Khronos Group Inc.
|
||||
//
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
@@ -17,15 +17,19 @@
|
||||
|
||||
const char *find_targets_kernel[] = {
|
||||
|
||||
"__kernel void find_targets(__global uint* image, uint target, volatile __global atomic_uint *numTargetsFound, volatile __global atomic_uint *targetLocations)\n"
|
||||
"{\n"
|
||||
" size_t i = get_global_id(0);\n"
|
||||
" uint index;\n"
|
||||
" if(image[i] == target) {\n"
|
||||
" index = atomic_fetch_add_explicit(numTargetsFound, 1, memory_order_relaxed, memory_scope_device); \n"
|
||||
" atomic_exchange_explicit(&targetLocations[index], i, memory_order_relaxed, memory_scope_all_svm_devices); \n"
|
||||
" }\n"
|
||||
"}\n"
|
||||
"__kernel void find_targets(__global uint* image, uint target, volatile "
|
||||
"__global atomic_uint *numTargetsFound, volatile __global atomic_uint "
|
||||
"*targetLocations)\n"
|
||||
"{\n"
|
||||
" size_t i = get_global_id(0);\n"
|
||||
" uint index;\n"
|
||||
" if(image[i] == target) {\n"
|
||||
" index = atomic_fetch_add_explicit(numTargetsFound, 1u, "
|
||||
"memory_order_relaxed, memory_scope_device); \n"
|
||||
" atomic_exchange_explicit(&targetLocations[index], i, "
|
||||
"memory_order_relaxed, memory_scope_all_svm_devices); \n"
|
||||
" }\n"
|
||||
"}\n"
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user