File indexing completed on 2024-04-30 04:10:33
0001 import FWCore.ParameterSet.Config as cms
0002 import sys
0003 import argparse
0004
0005 parser = argparse.ArgumentParser(prog=sys.argv[0], description='Test various Alpaka module types')
0006
0007 parser.add_argument("--accelerators", type=str, help="Set process.options.accelerators (comma-separated string, default is to use default)", default="")
0008 parser.add_argument("--moduleBackend", type=str, help="Set Alpaka backend via module instances", default="")
0009 parser.add_argument("--processAcceleratorBackend", type=str, help="Set Alpaka backend via ProcessAcceleratorAlpaka", default="")
0010 parser.add_argument("--expectBackend", type=str, help="Expect this backend to run")
0011 parser.add_argument("--run", type=int, help="Run number (default: 1)", default=1)
0012
0013 args = parser.parse_args()
0014
0015 process = cms.Process('TEST')
0016
0017 process.source = cms.Source('EmptySource',
0018 firstRun = cms.untracked.uint32(args.run)
0019 )
0020
0021 process.maxEvents.input = 10
0022
0023 if len(args.accelerators) != 0:
0024 process.options.accelerators = args.accelerators.split(",")
0025
0026 process.load('Configuration.StandardSequences.Accelerators_cff')
0027 process.load("HeterogeneousCore.AlpakaCore.ProcessAcceleratorAlpaka_cfi")
0028
0029 process.alpakaESRecordASource = cms.ESSource("EmptyESSource",
0030 recordName = cms.string('AlpakaESTestRecordA'),
0031 iovIsRunNotTime = cms.bool(True),
0032 firstValid = cms.vuint32(1)
0033 )
0034 process.alpakaESRecordBSource = cms.ESSource("EmptyESSource",
0035 recordName = cms.string('AlpakaESTestRecordB'),
0036 iovIsRunNotTime = cms.bool(True),
0037 firstValid = cms.vuint32(1)
0038 )
0039 process.alpakaESRecordCSource = cms.ESSource("EmptyESSource",
0040 recordName = cms.string('AlpakaESTestRecordC'),
0041 iovIsRunNotTime = cms.bool(True),
0042 firstValid = cms.vuint32(1)
0043 )
0044
0045 process.esProducerA = cms.ESProducer("cms::alpakatest::TestESProducerA", value = cms.int32(42))
0046 process.esProducerB = cms.ESProducer("cms::alpakatest::TestESProducerB", value = cms.int32(314159))
0047 process.esProducerC = cms.ESProducer("cms::alpakatest::TestESProducerC", value = cms.int32(27))
0048
0049 from HeterogeneousCore.AlpakaTest.testAlpakaESProducerA_cfi import testAlpakaESProducerA
0050 process.alpakaESProducerA = testAlpakaESProducerA.clone(appendToDataLabel = cms.string("appendedLabel"))
0051 process.alpakaESProducerB = cms.ESProducer("TestAlpakaESProducerB@alpaka", explicitLabel = cms.string("explicitLabel"))
0052 process.alpakaESProducerC = cms.ESProducer("TestAlpakaESProducerC@alpaka")
0053 process.alpakaESProducerD = cms.ESProducer("TestAlpakaESProducerD@alpaka",
0054 srcA = cms.ESInputTag("", "appendedLabel"),
0055 srcB = cms.ESInputTag("", "explicitLabel"),
0056 )
0057 process.alpakaESProducerE = cms.ESProducer("TestAlpakaESProducerE@alpaka")
0058 process.alpakaESProducerNull = cms.ESProducer("TestAlpakaESProducerNull@alpaka",
0059 appendToDataLabel = cms.string("null"),
0060 )
0061
0062 process.intProduct = cms.EDProducer("IntProducer", ivalue = cms.int32(42))
0063
0064 from HeterogeneousCore.AlpakaTest.testAlpakaGlobalProducer_cfi import testAlpakaGlobalProducer
0065 process.alpakaGlobalProducer = testAlpakaGlobalProducer.clone(
0066 eventSetupSource = cms.ESInputTag("alpakaESProducerA", "appendedLabel"),
0067 size = dict(
0068 alpaka_serial_sync = 10,
0069 alpaka_cuda_async = 20,
0070 alpaka_rocm_async = 30,
0071 )
0072 )
0073 process.alpakaGlobalProducerE = cms.EDProducer("TestAlpakaGlobalProducerE@alpaka",
0074 source = cms.InputTag("alpakaGlobalProducer")
0075 )
0076 process.alpakaStreamProducer = cms.EDProducer("TestAlpakaStreamProducer@alpaka",
0077 source = cms.InputTag("intProduct"),
0078 eventSetupSource = cms.ESInputTag("alpakaESProducerB", "explicitLabel"),
0079 size = cms.PSet(
0080 alpaka_serial_sync = cms.int32(5),
0081 alpaka_cuda_async = cms.int32(25),
0082 alpaka_rocm_async = cms.int32(125),
0083 )
0084 )
0085 process.alpakaStreamInstanceProducer = cms.EDProducer("TestAlpakaStreamProducer@alpaka",
0086 source = cms.InputTag("intProduct"),
0087 eventSetupSource = cms.ESInputTag("alpakaESProducerB", "explicitLabel"),
0088 productInstanceName = cms.string("testInstance"),
0089 size = cms.PSet(
0090 alpaka_serial_sync = cms.int32(6),
0091 alpaka_cuda_async = cms.int32(36),
0092 alpaka_rocm_async = cms.int32(216),
0093 )
0094 )
0095 process.alpakaStreamSynchronizingProducer = cms.EDProducer("TestAlpakaStreamSynchronizingProducer@alpaka",
0096 source = cms.InputTag("alpakaGlobalProducer"),
0097 intSource = cms.InputTag("intProduct"),
0098 expectedInt = cms.int32(84)
0099 )
0100 process.alpakaStreamSynchronizingProducerToDevice = cms.EDProducer("TestAlpakaStreamSynchronizingProducerToDevice@alpaka",
0101 size = cms.PSet(
0102 alpaka_serial_sync = cms.int32(1),
0103 alpaka_cuda_async = cms.int32(2),
0104 alpaka_rocm_async = cms.int32(3),
0105 )
0106 )
0107
0108 process.alpakaGlobalConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0109 source = cms.InputTag("alpakaGlobalProducer"),
0110 expectSize = cms.int32(10),
0111 expectBackend = cms.string("SerialSync")
0112 )
0113 process.alpakaGlobalDeviceConsumer = cms.EDProducer("TestAlpakaGlobalProducerNoOutput@alpaka",
0114 source = cms.InputTag("alpakaGlobalProducer")
0115 )
0116 process.alpakaGlobalConsumerE = process.alpakaGlobalConsumer.clone(
0117 source = "alpakaGlobalProducerE",
0118 expectXvalues = cms.vdouble([(i%2)*10+1 + abs(27)+i*2 for i in range(0,5)] + [0]*5)
0119 )
0120 process.alpakaStreamConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0121 source = cms.InputTag("alpakaStreamProducer"),
0122 expectSize = cms.int32(5),
0123 expectBackend = cms.string("SerialSync")
0124 )
0125 process.alpakaStreamDeviceConsumer = process.alpakaGlobalDeviceConsumer.clone(
0126 source = "alpakaStreamProducer"
0127 )
0128 process.alpakaStreamInstanceConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0129 source = cms.InputTag("alpakaStreamInstanceProducer", "testInstance"),
0130 expectSize = cms.int32(6),
0131 expectBackend = cms.string("SerialSync")
0132 )
0133 process.alpakaStreamSynchronizingConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0134 source = cms.InputTag("alpakaStreamSynchronizingProducer"),
0135 expectSize = cms.int32(10),
0136 expectBackend = cms.string("SerialSync")
0137 )
0138 process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer1 = process.alpakaGlobalDeviceConsumer.clone(
0139 source = "alpakaStreamSynchronizingProducerToDevice"
0140 )
0141 process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer2 = process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer1.clone()
0142 process.alpakaNullESConsumer = cms.EDProducer("TestAlpakaGlobalProducerNullES@alpaka",
0143 eventSetupSource = cms.ESInputTag("", "null")
0144 )
0145
0146 if args.processAcceleratorBackend != "":
0147 process.ProcessAcceleratorAlpaka.setBackend(args.processAcceleratorBackend)
0148 if args.moduleBackend != "":
0149 for name in ["ESProducerA", "ESProducerB", "ESProducerC", "ESProducerD", "ESProducerE",
0150 "ESProducerNull",
0151 "GlobalProducer", "GlobalProducerE",
0152 "StreamProducer", "StreamInstanceProducer",
0153 "StreamSynchronizingProducer", "StreamSynchronizingProducerToDevice",
0154 "GlobalDeviceConsumer", "StreamDeviceConsumer",
0155 "StreamSynchronizingProducerToDeviceDeviceConsumer1", "StreamSynchronizingProducerToDeviceDeviceConsumer2",
0156 "NullESConsumer"]:
0157 mod = getattr(process, "alpaka"+name)
0158 mod.alpaka = cms.untracked.PSet(backend = cms.untracked.string(args.moduleBackend))
0159 if args.expectBackend == "cuda_async":
0160 def setExpect(m, size):
0161 m.expectSize = size
0162 m.expectBackend = "CudaAsync"
0163 setExpect(process.alpakaGlobalConsumer, size=20)
0164 setExpect(process.alpakaGlobalConsumerE, size=20)
0165 process.alpakaGlobalConsumerE.expectXvalues.extend([0]*(20-10))
0166 setExpect(process.alpakaStreamConsumer, size=25)
0167 setExpect(process.alpakaStreamInstanceConsumer, size=36)
0168 setExpect(process.alpakaStreamSynchronizingConsumer, size=20)
0169 elif args.expectBackend == "rocm_async":
0170 def setExpect(m, size):
0171 m.expectSize = size
0172 m.expectBackend = "ROCmAsync"
0173 setExpect(process.alpakaGlobalConsumer, size = 30)
0174 setExpect(process.alpakaGlobalConsumerE, size = 30)
0175 process.alpakaGlobalConsumerE.expectXvalues.extend([0]*(30-10))
0176 setExpect(process.alpakaStreamConsumer, size = 125)
0177 setExpect(process.alpakaStreamInstanceConsumer, size = 216)
0178 setExpect(process.alpakaStreamSynchronizingConsumer, size = 30)
0179
0180 process.output = cms.OutputModule('PoolOutputModule',
0181 fileName = cms.untracked.string('testAlpaka.root'),
0182 outputCommands = cms.untracked.vstring(
0183 'drop *',
0184 'keep *_alpakaGlobalProducer_*_*',
0185 'keep *_alpakaStreamProducer_*_*',
0186 'keep *_alpakaStreamSynchronizingProducer_*_*',
0187 )
0188 )
0189
0190 process.t = cms.Task(
0191 process.intProduct,
0192 process.alpakaGlobalProducer,
0193 process.alpakaGlobalProducerE,
0194 process.alpakaStreamProducer,
0195 process.alpakaStreamInstanceProducer,
0196 process.alpakaStreamSynchronizingProducer,
0197 process.alpakaStreamSynchronizingProducerToDevice
0198 )
0199 process.p = cms.Path(
0200 process.alpakaGlobalConsumer+
0201 process.alpakaGlobalDeviceConsumer+
0202 process.alpakaGlobalConsumerE+
0203 process.alpakaStreamConsumer+
0204 process.alpakaStreamDeviceConsumer+
0205 process.alpakaStreamInstanceConsumer+
0206 process.alpakaStreamSynchronizingConsumer+
0207 process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer1+
0208 process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer2+
0209 process.alpakaNullESConsumer,
0210 process.t
0211 )
0212 process.ep = cms.EndPath(process.output)