Community
cancel
Showing results for 
Search instead for 
Did you mean: 
185 Views

dpct took more than 30 minutes to convert 1200 line code

Hi,

I am converting test_block_radix_sort.cu from repo cub and dpct is running from last 25 minutes. 

From task manager I can see that it is using CPU 25%. Memory consumption has gone up to 800,000+K. There are some (40+) warnings on console. I am not sure what's going on.

Current output is:

In file included from C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:45:
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:395:36: warning: result of comparison of constant 4294967295 with expression of type 'volatile unsigned short' is always true [-Wtautological-constant-out-of-range-compare]
        ((bits >= 0xFC01) && (bits <= 0xFFFFFFFF)));
                              ~~~~ ^  ~~~~~~~~~~
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:253:24: warning: DPCT1001:0: The statement could not be removed.
            if (error) break;
                       ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:253:13: warning: DPCT1000:1: Error handling if-stmt was detected but could not be rewritten.
            if (error) break;
            ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:269:24: warning: DPCT1001:2: The statement could not be removed.
            if (error) break;
                       ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:269:13: warning: DPCT1000:3: Error handling if-stmt was detected but could not be rewritten.
            if (error) break;
            ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:275:24: warning: DPCT1001:4: The statement could not be removed.
            if (error) break;
                       ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:275:13: warning: DPCT1000:5: Error handling if-stmt was detected but could not be rewritten.
            if (error) break;
            ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:278:24: warning: DPCT1001:6: The statement could not be removed.
            if (error) break;
                       ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:278:13: warning: DPCT1000:7: Error handling if-stmt was detected but could not be rewritten.
            if (error) break;
            ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:252:30: warning: DPCT1003:8: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code.
            error = CubDebug(cudaGetDeviceCount(&deviceCount));
                             ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:268:30: warning: DPCT1003:9: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code.
            error = CubDebug(cudaSetDevice(dev));
                             ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:277:30: warning: DPCT1003:10: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code.
            error = CubDebug(cudaGetDeviceProperties(&deviceProp, dev));
                             ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:280:17: warning: DPCT1005:11: The device version is different. You need to rewrite this code.
            if (deviceProp.major < 1) {
                ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:296:21: warning: DPCT1005:12: The device version is different. You need to rewrite this code.
                    deviceProp.major * 100 + deviceProp.minor * 10,
                    ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:997:1: warning: DPCT1011:13: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(char, char)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:998:1: warning: DPCT1011:14: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(short, short)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:999:1: warning: DPCT1011:15: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(int, int)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1000:1: warning: DPCT1011:16: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(long, long)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1001:1: warning: DPCT1011:17: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(longlong, long long)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1002:1: warning: DPCT1011:18: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(uchar, unsigned char)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1003:1: warning: DPCT1011:19: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(ushort, unsigned short)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1004:1: warning: DPCT1011:20: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(uint, unsigned int)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1005:1: warning: DPCT1011:21: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(ulong, unsigned long)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1006:1: warning: DPCT1011:22: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(ulonglong, unsigned long long)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1007:1: warning: DPCT1011:23: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(float, float)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1008:1: warning: DPCT1011:24: The tool detected overloaded operators for built-in vector types, which may conflict with the SYCL 1.2.1 standard operators (see 4.10.2.1 Vec interface). The tool inserted a namespace to avoid the conflict. Use SYCL 1.2.1 standard operators instead.
CUB_VEC_OVERLOAD(double, double)
^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1601:9: warning: DPCT1026:25: The call to cudaEventCreate was removed, because this call is redundant in DPC++.
        cudaEventCreate(&start);
        ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1602:9: warning: DPCT1026:26: The call to cudaEventCreate was removed, because this call is redundant in DPC++.
        cudaEventCreate(&stop);
        ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1607:9: warning: DPCT1026:27: The call to cudaEventDestroy was removed, because this call is redundant in DPC++.
        cudaEventDestroy(start);
        ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1608:9: warning: DPCT1026:28: The call to cudaEventDestroy was removed, because this call is redundant in DPC++.
        cudaEventDestroy(stop);
        ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1613:9: warning: DPCT1012:29: Detected kernel execution time measurement pattern and generated an initial code for time measurements in SYCL. You can change the way time is measured depending on your goals.
        cudaEventRecord(start, 0);
        ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h:1618:9: warning: DPCT1012:30: Detected kernel execution time measurement pattern and generated an initial code for time measurements in SYCL. You can change the way time is measured depending on your goals.
        cudaEventRecord(stop, 0);
        ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:97:12: warning: DPCT1008:31: clock function is not defined in the DPC++. This is a hardware-specific feature. Consult with your hardware vendor to find a replacement.
    stop = clock();
           ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:117:12: warning: DPCT1008:32: clock function is not defined in the DPC++. This is a hardware-specific feature. Consult with your hardware vendor to find a replacement.
    stop = clock();
           ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:190:21: warning: DPCT1008:33: clock function is not defined in the DPC++. This is a hardware-specific feature. Consult with your hardware vendor to find a replacement.
    clock_t start = clock();
                    ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:390:5: warning: DPCT1026:34: The call to cudaDeviceSetSharedMemConfig was removed, because DPC++ currently does not support configuring shared memory on devices.
    cudaDeviceSetSharedMemConfig(SMEM_CONFIG);
    ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:353:18: warning: DPCT1003:35: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code.
    CubDebugExit(cudaMemcpy(d_keys, h_keys, sizeof(Key) * TILE_SIZE, cudaMemcpyHostToDevice));
                 ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:354:18: warning: DPCT1003:36: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code.
    CubDebugExit(cudaMemcpy(d_values, h_values, sizeof(Value) * TILE_SIZE, cudaMemcpyHostToDevice));
                 ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:397:18: warning: DPCT1010:37: SYCL uses exceptions to report errors and does not use the error codes. The call was replaced with 0. You need to rewrite this code.
    CubDebugExit(cudaPeekAtLastError());
                 ^
C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_block_radix_sort.cu:398:18: warning: DPCT1003:38: Migrated API does not return error code. (*, 0) is inserted. You may need to rewrite this code.
    CubDebugExit(cudaDeviceSynchronize());
                 ^

----------------------------------

OK. While I was writing this, dpct has converted the file successfully but it took around 30 minutes to do that. I am not sure what happened or why it took so long. Usually it takes 1 to 3 minutes on my system (Intel i5-6200 2.3 GHz/8GB RAM). May be you want to take a look into that.

Also dpct is generating some yaml files. What am I supposed to do with them. They contain text like:

---
MainSourceFile:  'c:\users\intel\downloads\cuda code\cub-1.8.0\test\dpct\test_util.h'
Replacements:
  - FilePath:        'C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h'
    Offset:          1868
    Length:          0
    ReplacementText: '#include <CL/sycl.hpp>
#include <dpct/dpct.hpp>
'
  - FilePath:        'C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h'
    Offset:          2014
    Length:          26
    ReplacementText: ''
  - FilePath:        'C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h'
    Offset:          2233
    Length:          29
    ReplacementText: '#include "cub/util_debug.dp.hpp"'
  - FilePath:        'C:\Users\intel\Downloads\cuda code\cub-1.8.0\test\test_util.h'
    Offset:          2263
    Length:          30
    ReplacementText: '#include "cub/util_device.dp.hpp"'

What is it trying to tell me via these yaml files?

Regards,
Gagan

Tags (1)
0 Kudos
2 Replies
PrasanthD_intel
Moderator
185 Views

Hi Gagandeep,

We were able to reproduce your issue. It took us more than 30 mins for migration which is more than the normal.

We are forwarding this issue to the concerned team.

Regarding the yaml files generated during migration, they contain the changes done to the files during migration.

They help us to understand what are the changes made to those files.

Regards

Prasanth

96 Views

This will be a part of Beta09.