So, as we covered earlier, there is no direct access to SPUs, to main memory. SPUs cannot directly address main memory, it's via DMAs only. When aliasing is set up, then yes, SPE, whatever SPE's local store is being aliased into the effective address space, that SPE will do the address translation. But normally by default, there's no address translation, there's no visibility to main storage apart from DMA accesses. Again another diagram to show the access methods, the blue lines over here, the blue lines indicate the DMA transfer paths between the SPE to another SPE or to a PPE and access channels between the SPU and the local store, which is a 16 byte load and stores and then from the local store to the SPE, SPE can talk to the IO, any memory mapped IO devices also. Coherence and synchronization, you know, all transfers between the local store and the main storage are coherent and it's a necessary feature if you think about this architecture because there's what, eight processing elements, all of them are mapped into the effective address space and even can write into main memory. So obviously there was a need for hardware enforced coherence protocol. So whenever there is a load at a particular request, all the cached copies for data residing at that address are checked and if there is any touched cached copy existing, first that value is written into the main memory and then the load is completed.  Each DMA command is tagged with a 5-bit tag ID. It's basically just an identifier to identify one particular DMA transfer. So all SPEs can initiate DMA transfers. The PPE calls can also initiate DMA transfers, however, the DMAs from SPEs only are recommended. There's a few reasons for that, basically there's more SPEs and the DMA, the command queue on the SPE side is bigger, 16 entries versus eight entries for the PPE command queue. Also, there's only one PPE dealing with everything, controlling tasks, switching everything, right? Say if there's any context save and restore that needs to be done, it's the only entity. So why load the PPE again with another task of initiating DMA? Another theory that we have is consumer initiated requests are more manageable. So SPE being the consumer of data always should be initiating the DMA transfers. They are more effective, peak bandwidth is higher when the DMA is initiated by the SPEs when the transfer size is a multiple of 128 bytes because they generate full cache line requests and the address offset in the main memory and the local store address offset both need to be basically multiple of 128 bytes. So in other words, we're not generating any partial cache line requests, all cache lines are 128 bytes. So that's the reasoning behind it and these are the registers on the PPE, there's different registers to handle floating point computations versus fixed point, there's a condition register, typical register format, you know, like in an Intel architecture. The PowerPC instruction sets, all instructions are four bytes long and they're all aligned on word boundaries. It supports byte, half-word, word and double-word accesses to all the general purpose registers and supports word and double-word operand accesses between a storage and a set of floating point registers. Floating integers are always represented in two's complement form and there is an extensive vector or multi-media instruction set, so in other words, we can write vector code on the PPU also. However, what we really recommend is just to do all the vector computations because essentially when you're doing vector, you're trying to write some effective high-performance code. So you would want to do that on SPEs because they are more adept at handling compute intensive code. Again, these are the instruction types for reference. So there is cache control instructions available, flow control instructions available, general load and store instructions, memory synchronization instructions, typical to a PowerPC architecture. Some more user-mode instructions, again, the processing units in the PPU, the FxCfx point unit, the floating point unit, the vector unit, there's some more instruction types. Basically, the point of all this information is that there is support for all these instructions available. So your application could be anything. It could be an algorithm from the A&D space or from Electronic Design and Automation or Seismic or Image Crossing and it can be any application. So the instruction set is capable of handling a diverse range of applications. The message we are continuously trying to send by doing all these workshops and contests and these ecosystem-related activities is to send that the cell is not just a PS3 or a gaming chip. When it was designed, the architects had it in their mind that it has to take technology and high-performance computing to a totally different level. By doing some kind of breakthrough design and beating the competition that we face from all these SMP architectures or other multi-core architectures. So again, when you design this kind of breakthrough technology, obviously the programming will not be as similar or common to the mainstream programming. So that's why the need for this different kind of programming and DMAs and synchronization, so it takes a step more effort to get the performance out of this hardware. Pipe has got its own CEC++ language extensions, vector data types. They're all, even on Pipe, the vector data type is 128 bits, 16 bytes. So it can hold 16 8-bit values, signed or unsigned, 8 16-bit values, 4 32-bit values and 4 single precision nitriple floating point values. And there's three categories of entrances. This is just instructions, like the VMX instructions. Specific instructions have one-to-one mapping with a single assembly language instruction. Generic, they can map to one or more. Predicates, there is some conditional kind of instructions that are called predicate instructions. Basically, they'll compare two values and generate a mask. And that mask will be used directly as a value to detect a condition or a branch. And this is how a VMX program would look like. The top part of this program just defines a union consisting of an integer array, 4 elements, and then there's a vector signed in, a vector signed in, and then typed it to VECvar. So the main program is initializing a vector. So this is how you would initialize a vector. So Vconst is a type of structure Vvar, VECvar, and Vconst of myVec would be initialized to four floating point values, 2, 2, 2, 2. V1 is another vector of type, that union that we just defined, and initialize it with the different values, and then do a VEC underscore add. So that VEC underscore add is called a vector instruction or a VMX intrinsic. So basically, with one instruction in one cycle, we're doing four additions, which is the whole premise of data level parallelism or single instruction multiple data. So with one single instruction, you're operating on four vector elements. So the result is stored in myVec, and you can print it out the way it's shown in this program. So SP registers is pretty much simpler than the PPE register model. 128 registers, they all look the same, unified registers. So the same registers are used to do floating point or fixed point arithmetic. So SP executes both single precision and double precision floating point operations, and single precision they would be operated, performed in a four-way SIMD fashion, just like an unsigned end or end. They're all fully pipelined. Double precision operations, however, are partially pipelined. So this morning, we covered the even and odd pipelines, where you can place, you can run two instructions in one clock cycle. One is an even pipeline, like a arithmetic pipeline, and the other one is for memory operations. So with double precision operation instructions, though, it cannot be run with any other instruction at the same time. So dual issue is not possible. Apart from that fact, once you execute a double precision instruction, for the next six cycles, you cannot execute any instructions of any other type. So there's a 13-cycle clock latency, seven cycles to perform the double precision operation, and then six as a latency. So double precision right now on the current cell B hardware is a little expensive, or it's not as good as single precision, but it's still pretty good by par with other architectures. Only one rounding mode is supported. It's around towards zero. Denormal operands are treated as zero. There is no support for infinity. There is no infinity or not a number. And just as I mentioned, the other instructions are dual issue with double precision instructions. They are 13-cycle latency, and only the final seven cycles are pipelined. And then after you execute a double precision instruction, you cannot execute anything else for six cycles. The SP local store holds instructions and data. So in the 256 kilobytes of memory that you have, you have to fit the code and the data sections. The instruction prefetch will at least deliver 17 instructions. And because every DMA operation happens once in eight cycles. So in other words, for a DMA read, it's one by 16th, and for a write, it's one by 16th. So it doesn't really impact the usage of the single ported memory per se. Because there's only one port for reason rights, and three different kinds of operations that have to go through that local store. Read DMA read and write, SPU load and store operations, and then instruction prefetch. The priority, however, the highest priority goes to DMA reads and writes. And then loads and stores, and then instruction prefetch. The reason why then loads and stores have a higher priority over instruction prefetch is because the load and store would at least help you with the program execution. It will take the program go further. Instruction prefetch, on the other hand, is speculative, right, most times. So even pipeline 5.0, and our pipeline, all the instructions, there's the program programmers handbook and the microelectronics website, fully, it covers everything from architecture to coding standards to optimization mechanisms to thermal and power monitoring to performance counters to virtual storage, everything, decrementors, hardware clocks, everything is covered in the handbook. So and a good part of the handbook also goes over the instructions and the clock cycle latencies and which pipeline they are issued in. All the data is big Indian on the PPU and SPU, and which means the MSB would be 0, and the LSB would be the bit 128 or 127. Again SP instruction data type, the names look the same, it's always vector, following the data type. There's about 204 instructions, shift and rotate instructions, there is no rotate right. So when you have to rotate left, you just give it a negative index to do a rotate right. The synchronization and ordering kind of instructions. And again even in the SPU language extensions, there is three classes, specific, generic and composite. The third category is different, third category is composite which means it's basically a sequence of two or more specific or generic instructions. Specific is directly related to assembly level instruction, and generic is basically one or more assembly level. The examples are also given, any specific instruction will be preceding with an SI underscore and a generic would always be a SPU underscore, add, subtract, multiply everything. And this is how this data stored in memory. The first four bytes are called the preferred slot. So in other words, we highly discourage the use of scalar data types on the SPUs. We always say just use vector because that's the way you would optimally use all the resources available to you. So if you have to have to use scalar data types, let always make sure that the data always resides in the preferred slot, the first four bytes. So that when there is, for example, I think in the third presentation, we go over the SIMD operations, but basically it helps with the alignment, it's less overhead for the compiler, it's just better for in terms of execution. So in other words, this is the byte, let's see, this is one vector consisting of 16 bytes which can store four integers or four floating points or two double words consisting of eight bytes each or one quad word. This is a typical example of instruction, SPU underscore insert will insert a scalar into the vector D, SPU promote will try to promote one scalar to a vector and then extract by you can give it an index. Going back, this is always, if they were dealing with four unsigned in one vector, right? So 0 through 4 would be integer element 0 or you can call it integer element 1, 0 through 3 and then 4 through 7 would be integer element 2. So sometimes you might need to extract integer element 2 or integer element 3 from one vector and print it. So you can do that via this instruction SPU underscore extract and there's a whole bunch of instructions like this. And all loads and stores are one quad word at a time, 16 bytes at a time. There is built-in compiler directives, the built-in expect is used for branch prediction. Remember SPU does not have any hardware support for branch prediction. So we try to keep the SPU hardware as simple as possible, less silicon, less heat, less complication, enforcing the 16 byte loads and stores, you know, removes the necessity to deal with exceptions or traps. And the way we enforce that all data types are aligned on 16 byte boundaries is when you define a float factor, use this macro, aligned of 16 would align it for efficient data transfer. And you can always say do a branch hint by using align underscore hint. And this is an example of an SPU program. So similar to the other example that we saw, this is the union with consisting of four integer values and one vector signed and three vectors defined. And then initialize the first vector with four values, initialize the second vector with four values. And now to add it, instead of vec underscore add, the SPU would do SPU underscore add. So there is a local store with the SPU processing unit. And this is the memory flow controller. The memory flow controller consists of a DMA queue where you can queue in the DMA request, a DMA engine. Basically it's a DMA controller, atomic facility for any instructions that go through MMU and RMT is replacement management table. And then there's a memory mapped IO registers to be read and written into by the PPE. And MFC commands, so the memory flow controller is this whole and sole entity responsible for all communications with any other devices, right? So on the SPEs. So the purpose of MFC commands is to basically access main storage, two main initiatives, right? May I access main storage? And then to maintain synchronization with other processors and devices in the system. Now they can be issued either SPU or by the PPE, right? Basically the instructions are going through the MFC. They can either be issued by the SPE or by the PPE. And all these instructions are basically channel instructions. So any time you're trying to do a read or a write, basically it's a read or write to the channel instructions. For the PPE though, it's always memory mapped IO instructions. So as we covered in the previous diagram, whenever the SPE needs to talk to the basically the DMA engine, if you see the red line is the data bus, it's for whenever the SPU needs to talk to communicate with the MFC, it uses channel instructions. And whenever the outside entity, the PPE is existing somewhere here, it needs to talk to this MFC, it uses this memory mapped IO instructions. And then all MFC commands are queued under MFC SPE command queue. The proxy command queue are for the PPE initiated memory mapped IO instructions. And this is some detail for your reference. So all operations on any given channel, channels are strictly unidirectional. They're just message passing interfaces, basically. They're always done in program order. And you can always query the status of a channel instruction by doing reads and writes. So again, whenever we're talking about any DMA requests or any mailbox communication or synchronization commands, the reference point is always the SPE. So when we say get, it's into the SPE and put is out of the SPE. The internal instruction for a DMA command is SPU write channel, basically the channel instruction. Composite intrinsic, we just covered, is a collection of one or more specific or generic intrinsic, right? FC DMA 32 is the composite intrinsic. But the instruction that we use is a wrapper external, it's a much simpler wrapper routine as MFC get. This is the command that we will most commonly use in all the code. And these are all defined in SPU underscore MFC IO dot H. This is a syntax for MFC get, it's a simple DMA transfer command. Basically you give the offset, the local store pointer, as to where you want to put the memory in, once you fetch it from the main memory, and where do you want to fetch the memory from. And that is the effective address in the main memory space, and then how many bytes and then assign a tag and identify to the memory so that if you want, once you initiate the DMA request, you want to query if it's done or not. So the tag ID can be used to query the status of a particular DMA transfer. And then transfer class ID, TID is used when you want to change or manipulate the transfer mechanism on the bus for it. Usually it's just default. I'm not sure if it's enabled in the current SDK development too. Our ID is replacement class ID. Again this is something that we use when we're using software managed cache. There's features for fences and barriers, like a typical Linux OS supported fence and barrier. Nothing different over here. It's just that now we have combined the fence and barrier feature with the DMA command. So we have more control over IO. There's a 5-bit DMA tag for all DMA commands. Again so up to 32 tags is what we can create. This is an example for a fence and barrier. So essentially barrier is something, say for example this is a green slot that is a barrier, that is a DMA transfer that you have issued with a barrier option. So any preceding DMA transfers cannot be executed until this barrier instruction is done. And even succeeding DMA commands cannot be executed until this barrier instruction is executed. Versus a fence which only stops all the preceding DMA operations to be done before this particular DMA transfer is finished. But any succeeding ones, any DMA issues that are issued after this fenced command can just happen fine. So that's the difference between the fence and barrier, like a typical fence and barrier. Transfer sizes always have to be 1, 2, 4, 8 or multiple of 16 bytes per DMA. Maximum of 16 kilobytes per DMA transfer, 128 by kilobyte alignment is preferable for to generate, to get optimum performance. The command queue has 16 elements for SPU initially request, for PPU it's 8 element queue. There is something called DMA list which is a very excellent feature again that's provided on the SPEs and on the cell broadband engine.  So by which you can get, the SPE can initiate DMA list. In a DMA list what it tells is that asynchronously get memory from wherever it's available in the PPE address, in the effective address space. And that happens asynchronously while the program is executing on the previously fetched data, previously retrieved data. The advantage to the DMA list is that it can, it's a kind of a solution to fragmentation in the effective address space. It will just grab wherever it is there and maintain it in a list and just do it, process the whole data asynchronously while the execution is going on, on the previously issued data. It can contain up to 2K transfer requests and each transfer request can be up to 16 kilobytes. So on a total it can fetch 32 megabytes of data. That's the API MFC get, that's a simpler API where you just specify the local store address, the effective address, the size and usually these two fields are zeros. You can check the status of a DMA command by, MFC by this command the read tag status and this is the API MFC write tag mask is API to set the tag mask. Basically a tag status bit of one will indicate that no DMA request tagged with that specific ID are still in progress. So basically it has completed. So you can either check for, you can create multiple DMA requests with the same tag ID. So in a way you're grouping them in one category. So sometimes you want to check, make sure that all this bunch of DMAs all can be collectively addressed with one. It's like basically creating threads in one thread group. Similarly doing all the DMA transfer requests in one under one tag ID so you can query on that tag ID to finish, to check if all DMA requests are done. So you can check on status of one tag or all tags, all DMA requests are done or not. So it's a typical example of DMA memory to local store. So MFC get operation, define the tag mask and then do an MFC get operation. So it basically reads the contents from mem underscore address and the effective address space and puts it in the address pointed by LS underscore ADDR and then you check the status and make sure it's wait for all the DMA operation to be done. So that was the get. And this is the put. When you're done with the computation on the look on the SPE side, you can use this instruction the MFC underscore put instruction to write it back to the main memory. And some, so how do you transfer data between SPE and SPE? The other SPE doesn't know what the other SPE's addresses. The way you can do it is that PPE however knows all the SPE's IDs and the address offsets. So what one SPE say I'm SPE2 and I want to send data over to SPE4. So it's, there's no point sending the data over to the PPE and then PPE sending it over to the SPE4. Instead what the SPE can do is be a mailbox or some other mechanism, try to get the local store address for SPE4. So once you have the local store address for SPE4 using the same API over here. So instead of the memory address you give the local store address of the other SPE.  And tips to achieve peak bandwidth, always quad-word offset aligned data requests. They always have to be aligned 16 byte boundary. Mailboxes, they're always 32 bits in length. Basically the mailboxes are a really neat feature, really lightweight mechanism to say query status, send error code, return codes for program completion. Some kind of message to say okay, I'm done, you start or there's an error or wait something is wrong, something like that. So any kind of messages you can send via mailbox, 32 bit messages. So the PPE mailbox queue is one deep, there is a SPE write outbound mailbox queue for all the messages that it wants to write out to the PPE. There's a write outbound interrupt mailbox queue, the same thing except that after the data is written it will generate an interrupt. And then SPE will read inbound mailbox queue, basically PPE would write to it. So any messages that the PPE wants to send and then the SPE can read and it is four deep, in other words 16 bytes. So four 32 bit messages, 16 byte wide. This is the way the PPE again, even for mailbox it has to interact with the MMI or registers. So this is the API, pretty straightforward, really simple read write API. So this is the MFC, PPE mailbox, one PPE mailbox is there, one PPE interrupt mailbox is there and then SPE mailbox is there. So any time SPE wants to say read out from the mailbox, what the PPE has written for it, it can do a read out mailbox, all the SPE reads and writes to mailboxes are blocking. So in other words, if SPE is trying to write to the outbound mailbox that is already four it will halt, it will stall basically. So it's always a good idea to check the status to read the channel count and see if there's any data already there in the mailbox, if it's already full, if it's full then you wait. Also if SPE is trying to read from an empty mailbox, it will also stall until PPE writes something out of it, write something into it. So in order to avoid these stalls from the, for the SPE, it's always a good idea to check read the mailbox count and see if it's not empty or if it's not full. So this is the SPE, the PPE, if PPE is trying to write to some the mailbox which is already full, it will just overwrite the last entry, which is again not a good thing. So it won't halt the PPE because halting the PPE or stalling the PPE is a bad, bad idea, right? That's the only, your main application is running over there. So you want to check the status and make sure you don't overwrite data. So again this is just the API description, if the outbound mailbox is full the channel count will be zero. So if the SPE is trying to write to a full mailbox, it will remain stalled until PPE will read the message. So there's one 32-bit entry which is vacant. So there's room for write. And when the mailbox is read through the memory mapped IOU address by the PPE, the channel count is incremented. Similarly with write outbound interrupt mailbox, it's the same as the write outbound mailbox except that when the write is done and interrupt is raised. So provided the interrupt is enabled, so the first interrupt is serviced and then PPE goes and reads the MMI or register to get the data value out of it. So to avoid the SPE is stall, always read it before writing or reading, at least for the SPE. And for the PPE, if you don't want to read stem data or overwritten data, make sure you check the status. Similarly for read inbound mailbox channel, it will stall on an empty mailbox. So when the SPE wants to read any message that is waiting for it in the inbound mailbox from the PPE, make sure you read it, make sure it's not empty. Because if you try, if the SPE tries to read on an empty inbound mailbox, it'll stall until the PPE writes something to it. So this is the way to create the thread. So when the PPE is trying to try to create a thread, this is how it will try to create a thread. The SPE create thread ID, this is the group, thread group. If you have created a thread group before creating this API, you'll pass that in. And then this is the pointer for the program. And then Duke is going to cover that hands on in the lab to show, look at, see the code and see how the SPE program. Basically this SPE load image has to be the same name that is defined in the make SPE make file under the program underscore SPU. So it becomes a global reference. Again, to check the status of a mailbox, the simple API, start out inbox, pass it the SPE ID, find out if there's any data. Write out interrupt mailbox is also the same. Now when the PPE is trying to call it, it will pass in the SPE ID. When the SPE is trying to call it, obviously there's no SPE ID. All it needs to try to do is, when it's trying to do the right, it just sends the data to the PPE. So in the lab, there will be an example from a very simple, our premise is to basically get the message over to you on the basic mechanism on how the transfer happens and how the APIs need to be used. And we hope that you'll just build on top of it. Obviously in real world, it won't be as simple as this. It will be much more complicated. But if we set the right ground, we can be sure that the real application development can happen easier. So again, we just saw this in the previous presentation, reading into the local store is using the MFC get operation. So example one, there will be a get buff.c when we're covering all these examples. All it does is basically it will write an SPU program that will transfer the data into an SPU buffer from a PPU. So from the effective address space, using the MFC get operation, it will write the data buffer. And then it will try to get the data into the SPU and then write the data in the buffer to verify the transfer. Basically just print it. So this is how the PPU program would look like. I'll do all the defines, libsp is a libsp runtime management library. And then just standard header files. See right now, one thing that I want everyone to notice is in the PPU program. Always you'll have to define one variable for SPID. This is the buffer that we are creating. The malloc call would won't be a standard malloc call. It would be malloc underscore align. So in this case, and again, this definition, the support for this is there in the libmiss.hr file. So malloc underscore align is saying create 128 bytes and then align it on a 128 byte boundary, 2 power 7. So the 7 is an argument which just locked to of the input data. So in this buffer, we're writing the data good morning. And then creating the thread. So in this case, we have not created the thread under a group. So the first parameter is a 0. And then get buff underscore SPU is the program handle for the SPU program. And we'll be seeing that right now. Makefile will look like this. The base level makefile, the directory would be SPU. And then program PPU would be having this name. And then if you notice in the imports directory, you're linking to the SPE runtime library, the MISC library for all the memory operations. And then put buff underscore SPU, which is the same as the parameter over O. I think it's incorrect over here. It has to be get buff. So this name would be the same name as the program handle over here. And this should be created over here. SPE, external SPE program handle, get buff underscore SPU. So essentially in the PPU symbol space, this program handle, whatever is the SPU references will be visible to the PPU because it's embedded in the PPU executable itself. And this is the smartest way we could come up with in order to entertain the two different architectures inside only one binary also to save any things like inter-process cops. We don't need any IPCs. We don't need any messaging mechanisms. We want to keep it simple so that they're still visible in the global address space. And we don't need any explicit commands so that the SPU symbols are visible to PPU and vice versa. So get buff SPU would be the program handle or a reference to the executable, the SPU executable. The buffer is there is a third second parameter in the SPE create thread, which is like the environment pointer, which would be sending over data if you wanted to over to the SPU code. So this is like we want to say, OK, I've created a thread. And this is what I want the thread to do because the get buff underscore SP is not just a program handle. It's a program which gives a defined role for the thread. Like you can create a thread, but what is the thread going to do? What is its code portion? The handle gives it by creating the thread, you're actually giving the code portion to it.


Green Mountain supports services to empower neighbors with disabilities to be home in the community. Major support also includes Washington County Mental Health, where hope and support come together. Ala Israel. All people know limits. Hello and welcome to this edition of Ableton On Air, the one and only program that focuses on the needs, concerns and achievements of the Deaf and the Able in Vermont and beyond. Before we get to our important show today, I would like to thank our sponsors, Washington County Mental Health and Green Mountain support services. With me is Roy Gustenberger of First Person Services, and thank you for joining me on this edition of Ableton On Air. You're welcome. I'm very pleased to be here. So, explain what First Person Services is in Vermont and how it came to be. Well, we're an organization that brings management and training expertise to work with organizations and groups of people to help advance person-centered practices. When you say first person-centered practices, what exactly does that mean? Well, the idea behind person-centered practices is to place an individual who's receiving support, who's accessing a service system to get support to live a full life in the community, to make sure that services are organized in a way that keeps them at the center as opposed to the system. And organizations, nice organizations like Washington County Mental Health and Green Mountain Support Services are organizations that are focused on trying to be person-centered and do very well with that. But it's a disciplined kind of approach where you identify practices and ongoing habits that really make sure that all of the demands of the system don't distract you from the needs of the individual. When you say distraction, exactly what does that mean? Just to consider, a lot of people are afraid to get services, but they don't know the problem with today's society. A lot of people are shuttered, like the elderly and people with special needs. They don't know where to get the services. So, can you explain a little bit more about that and how easy it is to access services? Well, access is an important thing. Certainly, the state of Vermont offers a variety of services through its agency of human services and is engaged in the Vermont system in a nice partnership between the state organizations and private nonprofits that are out there that are organized to provide a range of services and supports. And Vermont has a nice regional system where each area that you live in, Vermont, there's a local agency that's either a designated agency or a support organization that they can go to to find out what they're eligible for and what kind of support they can have. People come to organizations designated agencies like Washington County Mental Health Services because they want to live full lives in the community, and they have a vision, they have something they want to accomplish, and they need supports to get there. So, when we talk about distraction, your question about distraction is to keep public funding flowing and to keep a designation in place and licensure and certification. Systems and employees of organizations really have to work hard to make sure that they comply with all of the regulations. That kind of mandate is something that agencies can't get wrong because they'll go out of business. But it does have that tendency to be one of those things that are at top of mind as opposed to what the actual needs of the individual may be at a particular moment, the change they want to see or their strengths and what they want to achieve in terms of their life goals. Well, okay, when you say mandate, I know that the Americans with Disabilities Act has changed over the years. And there's some loopholes or problems that need to be fixed within that piece of legislation. In your opinion, how do you think it can be fixed in relation to what you do as a service provider or in management? Well, the Americans with Disabilities Act was, of course, a milestone, a major change in federal law, which mandated a lot of great structures that are in place nationally that need to be in place in each one of the states, including the university centers on excellence for DD services, the DD councils, and the advocacy groups such as Legal Aid and Disability Organizations. And also Green Mountain Self-Advocacy as well. Exactly, exactly. So all of that nice infrastructure has been put into place. Like anything else, we look at something like that as aspirational, something that we need to try to achieve. I think of it like our Bill of Rights or our Constitution, something that was put into place that we haven't quite gotten to. We really haven't achieved all of the equality and the justice for all that's essential. The Americans with Disabilities Act tried to bring that closer into reality, and we're still trying to, I think, meet the kind of mandates and the kind of vision that's embedded in that. How I would change it, I don't have specific recommendations at this particular point in time. I know that there's organizations that are really studying how we can improve those kind of access services and their great resources in the community to connect with for sure. In terms, okay, knowing that there are prejudices in this world now and problems and systems regarding prejudices, do you think prejudice around people with special needs would change or can it change in your opinion? I think it needs to change. I see the core mission of organizations like First Person Services and some of the service organizations out there to build whole communities. The way that we build whole communities is to ensure that everybody is recognized for the gifts that they have to share with the community. My friend Liz Weintraub talks about all means all. When you're talking about justice for all, everyone must be included and contribute. My opinion is that our communities are stronger when everyone is included. As we move forward, we're looking at all of us, the marginalized groups in our society, trying to reduce prejudice, as you say, trying to reduce stereotypes, trying to reduce any kind of effects that disenfranchise people and bring people into the core of community life. Certainly people with disabilities, in my experience, have a tremendous amount to contribute to our community and to our society and to our culture as a whole and making sure full inclusion happens is critical. I also believe that disability is a natural part of the human experience and that it's not one of those things that's necessarily an us-them kind of dichotomy, but that disability, just as with aging, is something that is natural part of what it means to be human. We go through phases in our lives when we have different kinds of challenges. We have loved ones, family members, neighbors who experience disability. So we're really talking about all of us and making sure that we're all included. What? Okay, so since you said that and first person services, can you explain some of the trainings that you give or some of the workshops or trainings that your organization gives? Yes, one of our key focus areas is what's called person-centered thinking. And person-centered thinking is a set of strategies and approaches that organizations and people who provide supports and people who receive supports can use to help make sure that the, as I was referring to before, that the person remains at the center of planning, of problem solving, of organizing supports and making sure that they are oriented correctly. We think about person-centered planning as a real core approach and core strategy in organizing any kind of services, and that's where a person is brought into the center of conversation and engagement around how to establish a clear vision and a goal for a future in one's life and to how to really find and locate and enable those resources, hopefully natural resources, typical resources in ordinary situations that can be mobilized so that somebody can live a full life. Person-centered thinking are disciplined practices, certain things that we teach in a workshop, and it's a workshop that's designed by an entity that I'm a member of that's called the Learning Community for Person-Centered Practices. It's an international group of volunteers who are involved in services, family members, also includes self-advocates, consultants, trainers from around the world who use a standard set of practices and teaches them in a 12-hour introductory workshop. We love providing that through first-person services. Not only the workshop itself, but we also credential people within organizations to give the workshop. So they get a certificate or diploma of sorts? Correct. They get a certificate that indicates that they are credentialed according to the standards of the international learning community. The wonderful thing about that is it is indeed a learning community. We think about the pursuit of person-centered approaches as a journey, something that you start and stay on and continue to grow on, and to be part of a learning community, to be actually able to talk with people who are using the same kind of strategies and approach and have the same set of core values in Canada and Australia and the United Kingdom and other countries around the world. Israel, where there's training like this going on, we can actually connect through the Internet and have common conversations on discussion boards and really try to perfect our approaches and skills over time. You've been in the field of special needs for disabilities for 40 years. Can you explain about your experience? Sure. Well, it's 40 years because I went to Middlebury College in Vermont and when I was seeking a particular job and was looking around the community, I was a psychology major and I was very interested based on some other experiences of being involved in the disability services. The first place that we looked through at that time, and this was 1979, was Brandon Training School. That has an infamous history. It does have an infamous history, but I did have experience working there as a recreational aid during the summertime actually, and then got employed in one of their day programs. It was an extraordinary experience for a young person coming out of college to really, I was familiar with people with disabilities as I was growing up but it was much more segregated society there and to have this world sort of open up, this place of exile where people with disabilities were placed, where they were separate from community, where they were isolated, was, and to see the conditions there, transformed me. I became very committed to the idea of trying to, as I was referring to before, building whole communities. There must be something better, there must be a better approach. I had the opportunity to work with a local agency after that and over the past 40 years, that's really represents the period of time of de-institutionalization, the development of community-based services and the really exploration and expansion of services that are dedicated to helping people be part of their community. When you say de-institutionalization, can you, in your vast opinions, can you explain what that is? Sure, with Vermont was the first state to look at alternatives and build alternatives to an institution. The institution ended up, was one of the most innovative approaches for its time in the 19th century when they were created but they evolved and changed and became very bad places for people to be and a problem to be solved. When we're talking about the de-institutionalization process, there was a commitment from leaders and family members who came to the table and said, what can we do to make sure that families get the resources they need where they live, where people who want to experience full life in the community don't have to be exiled from the community to get those services. And so it was a shift of resources and a shift of focus and a shift of innovation in the state of, in the part of the state of Vermont where people could then, one, move out of institutions, create alternatives but also have a sustainable long-term vision as to what would that alternative be. So Brandon Training School was closed and Vermont rather has had an alternative system for that many years. Many other states in the country have remained with institutional care. Unfortunately, there were only 13 other states that followed suit after Vermont and it was just recently that states have been asked by the federal government to walk away from that institution. There are still 39 states that are institutionalized or have what we call, as in New York, they call them developmental censors. That's right, that's right. And institutions by other names. There was a horrible one in New York called Willowbrook State School and there was no schooling going on, there was no training, nothing. We just force fed, not closed and the media had to, Geraldo Rivera jumped over the wall and closed it with help. You bet, Willowbrook was infamous for that but there's many Willowbrooks across the country. Again, separate is not equal and isolation is not the solution. So that's why there's a dedication and focus on providing typical settings, opportunities for people to form normal and typical relationships with others, to be fully employed, to live with others who are engaged in freely given relationships, where people's gifts are recognized and they are both givers and receivers of care because that's what it means to be a full member of community. Okay. You were working in Brandon State School, being the fact that in the world we live in now with a little bit uncertainty about how services are for people with special needs due to funding. There's scaring people saying that we might revert back to institutions at some point. Do you think that might happen or do you think there's too many organizations that won't let that happen in your opinion? Well, that's an interesting question because one of the things that we have remained focused on over time is that it's fairly easy to say that the buildings don't exist anymore, but the fact is that there is an institutional mindset that can come in and be embedded in any place that somebody lives, right? Yes. Where somebody is dehumanized, where somebody is exploited, and so on. So that risk of isolation, loneliness, exploitation can exist in any system at any time. There won't be a time when there will be an investment, I don't believe, in bricks and mortar and separate buildings where people live in dormitories and so on. But if we don't appreciate what the values that drove the development of the institutional era of our system, what they were and recognize that if we're not vigilant, they can come back, then they will come back. Because institutions, for example, during, well, I call it the Little House on the Prairie Days, 1800s that time, they put people that were visually impaired and blind in institutions, locked them away, you know, that type of thing. And like the time of Louis Braille, the school that he was at didn't treat him too well in Cuvier, France.  But I guess it's people's mindsets, correct? And how things should change. That's right, that's right. It is a mindset. And it is, I think, a set of community values. One of the things that we hope that happens is that if we continue to think of whether we're supporting people who are aging, whether we're supporting people who are going through mental health challenges. And nursing homes are horrible as well. Yes. And if we continue to foster relationships, if we continue to emphasize natural supports, that the larger community will be thinking of all of us as us. And we tend to defend us, you know. We tend to say if changes happen and somebody, we start seeing a group of people being taken away or marginalized, that we will react, step up and react as a community to say, no, that's got to stop. That's my friend. Or that's the person who is my coworker. Or that's a guy I used to go to school with. If we have those kind of common experiences, then hopefully the kind of advocacy that will happen will be citizen advocacy. Not a specialized advocacy, but one of neighbors helping neighbors and saying we've got to do things better. We've got to do it in a different way. So that's one of the other reasons why a community-based services is so critical is it keeps our communities whole when they can be whole. And I've talked with a lot of organizations that are providing services in Vermont, where they think about the importance of their role in strengthening communities and strengthening natural ties that can happen in communities. And they look at creative ways to do that as opposed to specialized services. So how can we strengthen clubs and organizations? How can we strengthen opportunities for people to get to know each other, to defend each other, to love each other, to be engaged in hospitality with each other? Customer service. Customer service. So that those things are lifted up as community values and communities remain strong. So these creative kind of approaches, moving away from specialized services and becoming an embedded community organization that helps natural community supports be even stronger and more inclusive is the kind of innovation that's happening in Vermont. And because Vermont has been for so many years working on community-based services and it's stepped away so long ago from institutional care, we have a very deep, rich experience. And as I've traveled around the country and done some training, person-centered thinking training in other states, I found that they are in many cases just starting the journey of person-centered approaches or community-based services. And they're starting to experiment with some of the things that was happening in the 1980s or 90s in Vermont. They're able to take some of our experiences and build on them. And that's another reason why that kind of idea of a learning community where we can, other states can learn from Vermont. We can learn from other states as they evolve in contemporary society and we can all get better. I'm very optimistic about the possibilities. And I think that particularly if we're able to stay dedicated to person-centered practices. That's another reason why we moved to Vermont because there's more services here. Or not every service, you know, people need but they can pick and choose which ones they need. There's choice. Choice and control are two of the core features that we all want to lift up. When there's not choice and control, there's a sense of being treated as an object as opposed to a person. People don't want to come in and work with a community organization which it feels like they're being handed a menu. And if they don't like the food on this menu, they got to find another restaurant. An organization that's person-centered looks at the individual, says what do you need? Let's understand your strengths. Let's understand your hopes and dreams. Now how can we be of service? How can we help you find that in natural resources in the community? Natural relationships in the community. And pursue the ordinary first and develop the specialized later. But one way or the other, making sure that they stay committed to the idea of helping people look for lives. In your opinion, I ask this of all my guests, what are the misconceptions around people who especially when they first meet them? Positive or negative. What my sense is? Yeah. I think that that varies very much based on personal experience. And if I could use my own life as an example. As I was mentioning before, I grew up actually in New Hampshire. As I said, I went to college in Vermont and started my work here and then went back to New Hampshire, worked for a number of years and recently returned here. But the community that I grew up in was segregated in a number of ways. But in a key way is the people who had developmental disabilities, my neighbors, I did not get to know. They went in New Hampshire to Laconia State School, which was very similar to Brandon Training School. So I never met them. So when I approached and met people over my life as I grew older who had disabilities, they were strange to me because I had not been familiar, I had not grown up. But I contrast that with my experience of my children who lived in a community where kids were included in school. They were in athletics. They were in school events. They were in classrooms where they got to know their neighbors who may have Down syndrome, someone who may have cerebral palsy, someone who may have a variety of learning disabilities. They got to know them. And so as a result, as they've now grown up and become young adults and are having children themselves, it's not foreign. It's not out of the ordinary. It's typical. And that's the way it should be because it's a natural characteristic, as I said, disability is a natural part of the human experience. And I've learned that lesson very much from the early pioneers who were parents, who really were fighting for that inclusive school system, who were fighting to make sure their kids were known and engaged with others. And I always admired them. They were always working tirelessly, it seemed. And one of the reasons and explanations for that kind of early work and heroic and extraordinary work, and part of those advocates, is that they realized that they didn't want moms and dads of the future to have the experience that they've had. They wanted it to be easier for parents in the future. And they were able to do that. So going back to your question, I think in some ways it might be generational. I think that younger people are more accepting and more familiar. And that's the source of my optimism that I was referring to before. Can you tell me, I mean we have a little time left, but can you tell me, can you tell our viewers some of the future goals of your organization? How long has your organization been? We've been in existence for two years. We have been doing training. We also have a nice podcast that's called The Lovely Podcast. And one of the things that we're doing this next year, we're credentialing a number of trainers in Vermont, in New Hampshire and in Massachusetts. So we're hoping to expand, we're hoping to create a New England learning community of credentialed trainers that are embedded in organizations and create a local community where we can, our goal eventually is to have a local conference, a local series of events. There is a national gathering, they're called learning community gatherings that occur in every July in Oregon, Portland, Oregon. But also regions of the country have their own and we're going to create one for New England. So we're going to continue with that training and develop that community. Tell me a little bit about your podcast, The Lovely Podcast. Yes, The Lovely Podcast is a set of conversations that we have with people that we describe folks who are curious and committed and creative in building whole communities. So it's folks who have that kind of vision, nice conversations to explore how they've had that happen in their lives and what they're doing with that today. So we've been interviewing some great self-advocates. We've been interviewing some agency leaders. And you'll be interviewing me. And we'll be interviewing you. We're very happy to have you as a guest on the podcast as well. So that's been a lot of fun and it's available on all of the distribution systems, the iTunes and Spotify. It's all available through those apps. And the podcast educates people about advocacy. Yes, to share ideas and to share those values to make us feel that we can think about things in a fresh way and continue to try to build a whole community. How has advocacy changed in your opinion over the years? I know we have self-advocacy groups in Vermont and that type of thing. So your opinion on advocacy and why it's important. Absolutely. One of the most extraordinary aspects of advocacy is when parents, family members and people who experience disability themselves develop leadership skills and start developing pure connection. And how that's changed over time is just to see some of the people come up through the years. There's been folks who championed the Americans with Disabilities Act that you referenced before who were able to get something through Congress and signed by President Bush. And Justin Dart was a great leader in that. But there's a lot of folks that have come behind him and that are coming up in the future. That gives a level of hope that's just extraordinary. And the power of being able to share common vision and also the ability to say it's okay. Some things are scary but this is what I've done and this is how my life has turned out. Yours can do that as well. Are just really amazing. And families loved ones as I mentioned before are great leaders. And just to comment, if it wasn't for parents, a lot of these organizations or grassroots organizations started with parents. Absolutely. If it wasn't for parents and you wouldn't have organizations. Absolutely. And another element to that, I'm glad you mentioned that, is one of the recent guests on the podcast, the lovely podcast was Liz Weintraub. I heard that. Wonderful. And she was great. I've known her for a few years. And one of the things that she reminded us is this theme that you do hear from families and individuals, which is nothing about us without us. And the organizations that I've been a part of, I led an organization, a regional agency in New Hampshire for quite a number of years. The board of directors had at least one third participation from family members and individuals with disabilities themselves. And that's also the case in Vermont. When you make sure that people who are affected by the service system that you're in charge of or that you are a leader of, that they're at the table when decisions are made, it changes the quality of those decisions. It improves them. So that idea of inclusive decision making and inclusive leadership, co-leadership is a feature of Vermont system and something that's really been tremendous. Do you think all the situations, all the, because I know how this current administration that we're in now with this current president, organizations are being cut, budgets are being cut. Does it all have to do with money as far as the field of disabilities? Are we in a big mess or are we not? We have to continually be vigilant because as you said, we look at a current, a new administration and we always have to take a look at what are they bringing in in terms of leaders to the table and nothing about us without us. What do they have for priorities? And what are they going to do with the budget? Certainly funding, Medicaid is a core funding source. They keep saying they're going to cut it? It's always on the table, it's always being questioned and social security in terms of practice, regulations and standards, they're always being reviewed. So we always have to be vigilant, we can never stop. It's one of those reasons why community organizations think so much about developing natural supports is that if you are entirely dependent upon public dollars, then those can change with the political winds. But if you are investing in the strength and resources of the community and natural supports, those can help you through and those friends don't go away. Love is more resilient than political winds. And so when we look at the, we have to be worried about this current administration, we've had to be worried about Democrats and Republicans alike. Because yes, unfortunately, we have a tendency in our society and our culture to say, can we afford this? And not to question whether we can afford military endeavors, for example, or bailouts of large corporations. That seems to not take any debate at all, yet we spend hours and hours talking about rates in Medicaid and so on and where we're going to get the money. We can do it if we have a commitment to a whole community. Personally, I believe it should always be there. Real quick, where can people reach you and also your podcast, where can they listen? Well, they can reach me at direct phone line is wonderful<PHONE_NUMBER>. I'm at my email is Roy at FirstPersonServices.com. We have a great website. You can link with us there. We have a Facebook page. We also have a Deluvly Facebook page. So find First Person Services on Facebook. Find Deluvly on Facebook. Does Deluvly podcast have a website all its own? We have a page on our First Person Services website. It's a great place to go. You can actually listen to the podcast recordings right from the website or pick up your smartphone. Open up the podcast app, search Deluvly podcast and it'll show up and hit subscribe. D-E-L-O-V-E-Y? D-E-L-O-V-E-L-Y. D-E-L-O-V-E-Y. No, it's FirstPersonServices.com. We've integrated that in our website. Well, I would like to thank you for joining me on this edition of Abledon On Air. For more information on First Person Services, you can go to www.firstpersonservices.com. Again, Arlene Seiler, my wife could not be here today, but we'd like to thank you for joining us on this edition of Abledon On Air. We would like to thank our sponsors, Green Mountain Support Services, and Washington County Mental Health, as well as our guest, Roy Ghostenberger of First Person Services. Thank you for joining me on this edition of Abledon On Air. I'm Lauren Seiler. See you next time. Major support for Abledon On Air, Green Mountain Support Services, to empower neighbors with disabilities to be home in the community. Major support also includes Washington County Mental Health, where hope and support come together.